С помощью этого метода мы можем двигаться по перечислителю хранилища.
ULONG uCount;
STATSTG stat;
while (lpEnum->Next(1,&stat,&uCount)==S_OK)
{
cout << (LPSTR)stat.pwcsName << endl;
}
lpEnum->Release();
Информацию о типе объекта мы получаем в структуре STATSTG. В этой структуре есть поле type, с помощью которого мы можем определить тип объекта:
if (lpEnum!=NULL)
{
cout << "Ok enum" << endl;
ULONG uCount;
STATSTG stat;
while (lpEnum->Next(1,&stat,&uCount)==S_OK)
{
cout << (LPSTR)stat.pwcsName << endl;
switch(stat.type)
{
case STGTY_STORAGE:
cout << "Storage" << endl;
break;
case STGTY_STREAM:
cout << "Stream" << endl;
break;
case STGTY_LOCKBYTES:
cout << "LockBytes" << endl;
break;
case STGTY_PROPERTY:
cout << "Property" << endl;
break;
default:
cout << "Unknown type" << endl;
}
}
lpEnum->Release();
}
pwcsName хранит название объекта. Вот теперь мы эти знания и применим к изучению имен в хранилище.
while (lpEnum->Next(1,&stat,&uCount)==S_OK)
{
char buffer[100];
wcstombs((CHAR*)&buffer,stat.pwcsName,sizeof(buffer));
cout << buffer << endl;
}
Вот результат. Ok open Ok enum 1Table Macros CompObj ObjectPool WordDocument SummaryInformation DocumentSummaryInformation Press any key to continue
Вполне читаемо. А вот результат иследования Excel:
Ok open Ok enum Workbook SummaryInformation DocumentSummaryInformation Press any key to continue